package com.vlyman.code;

import com.baomidou.mybatisplus.core.exceptions.MybatisPlusException;
import com.baomidou.mybatisplus.core.toolkit.StringUtils;
import com.baomidou.mybatisplus.generator.AutoGenerator;
import com.baomidou.mybatisplus.generator.engine.FreemarkerTemplateEngine;
import com.vlyman.code.config.CommonConfig;

import java.util.Scanner;

/**
 * 类描述：
 *  业务代码生成器
 * @author chenjs
 * @date 2018/10/15 15:46
 **/
public class CodeGenerator {

    public static void main(String[] args) {
        AutoGenerator ag = new AutoGenerator();
        // 全局配置
        ag.setGlobalConfig(CommonConfig.initGlobalConfig());
        // 数据源配置
        ag.setDataSource(CommonConfig.initDataSourceConfig());
        // 包配置
        ag.setPackageInfo(CommonConfig.initPackageConfig(consoleInput("模块名")));
        // 代码模板配置
        ag.setTemplate(CommonConfig.initTemplateConfig());
        // 自定义配置
        ag.setCfg(CommonConfig.initInjectionConfig());
        // 策略配置
        // 若需全数据库表匹配，可输入(.*?)，此正则表示匹配所有字符串
        // 若需t_sys_开头据库表匹配，可输入(^t_sys_.*?)，此正则表示匹配t_sys_开头所有字符串
        ag.setStrategy(CommonConfig.initStrategyConfig(consoleInput("表名(可使用正则表达式)")));
        // 选择 freemarker 引擎需要指定如下加，注意 pom 依赖必须有！
        ag.setTemplateEngine(new FreemarkerTemplateEngine());
        ag.execute();
    }

    /**
     * 方法描述：
     *   读取控制台输入内容
     *  @author chenjs
     *  @param tip
     *  @return String
     *  @date 2018/12/12 17:46
     */
    public static String consoleInput(String tip) {
        Scanner scanner = new Scanner(System.in);
        StringBuilder help = new StringBuilder();
        help.append("请输入" + tip + "：");
        System.out.println(help.toString());
        if (scanner.hasNext()) {
            String ipt = scanner.next();
            if (StringUtils.isNotEmpty(ipt)) {
                return ipt;
            }
        }
        throw new MybatisPlusException("请输入正确的" + tip + "！");
    }
}
